package ar.com.gals.domain;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@SequenceGenerator(
	name = "gals_id_sequence", 
	sequenceName = "articulo_id_seq", 
	allocationSize = 1
)
@Table(name="articulo")
public class Articulo extends Gals {

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "marca_id", referencedColumnName = "id", nullable = false)
	private Marca marca;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "rubro_id", referencedColumnName = "id", nullable = false)
	private Rubro rubro;
	
	@Column(name="codigo", nullable = false)
	private String codigo;
	
	@Column(name="descripcion", nullable = false)
	private String descripcion;
	
	@Column(name="precio", nullable = false)
	private Float precio;
	
	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "archivo_id", referencedColumnName = "id")
	private Archivo archivo;
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "articulo", orphanRemoval = true)
	private List<Observacion> observaciones = new ArrayList<Observacion>();
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "articulo", orphanRemoval = true)
	private List<Equivalencia> equivalencias = new ArrayList<Equivalencia>();

	
	public Marca getMarca() {
		return marca;
	}
	public void setMarca(Marca marca) {
		this.marca = marca;
	}
	public Rubro getRubro() {
		return rubro;
	}
	public void setRubro(Rubro rubro) {
		this.rubro = rubro;
	}
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public Float getPrecio() {
		return precio;
	}
	public void setPrecio(Float precio) {
		this.precio = precio;
	}
	public Archivo getArchivo() {
		return archivo;
	}
	public void setArchivo(Archivo archivo) {
		this.archivo = archivo;
	}
	public List<Observacion> getObservaciones() {
		return observaciones;
	}
	public void setObservaciones(List<Observacion> observaciones) {
		this.observaciones = observaciones;
	}
	public void addObservacion(Observacion observacion) {
		this.observaciones.add(observacion);
	}
	public List<Equivalencia> getEquivalencias() {
		return equivalencias;
	}
	public void setEquivalencias(List<Equivalencia> equivalencias) {
		this.equivalencias = equivalencias;
	}
	public void addEquivalencia(Equivalencia equivalencia) {
		this.equivalencias.add(equivalencia);
	}
}
